package com.todod.base.module.infra.service.baseofficialletter;

import jakarta.validation.*;
import com.todod.base.module.infra.controller.admin.baseofficialletter.vo.*;
import com.todod.base.module.infra.dal.dataobject.baseofficialletter.BaseOfficialLetterDO;
import com.todod.base.framework.common.pojo.PageResult;

/**
 * 公函 Service 接口
 *
 * @author 平台管理员
 */
public interface BaseOfficialLetterService {

    /**
     * 创建公函
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createBaseOfficialLetter(@Valid BaseOfficialLetterSaveReqVO createReqVO);

    /**
     * 更新公函
     *
     * @param updateReqVO 更新信息
     */
    void updateBaseOfficialLetter(@Valid BaseOfficialLetterSaveReqVO updateReqVO);

    /**
     * 删除公函
     *
     * @param id 编号
     */
    void deleteBaseOfficialLetter(Long id);

    /**
     * 获得公函
     *
     * @param id 编号
     * @return 公函
     */
    BaseOfficialLetterDO getBaseOfficialLetter(Long id);

    /**
     * 获得公函分页
     *
     * @param pageReqVO 分页查询
     * @return 公函分页
     */
    PageResult<BaseOfficialLetterDO> getBaseOfficialLetterPage(BaseOfficialLetterPageReqVO pageReqVO);

    /**
     * 有效、无效公函-查询公函分页
     *
     * @param pageReqVO 分页查询
     * @return 公函分页
     */
    PageResult<BaseOfficialLetterDO> getEffectOfficialLetterPage(BaseOfficialLetterPageReqVO pageReqVO);

    /**
     * 公函审批-查询公函分页
     *
     * @param pageReqVO 分页查询
     * @return 公函分页
     */
    PageResult<BaseOfficialLetterDO> getInvalidOfficialLetterPage(BaseOfficialLetterPageReqVO pageReqVO);

    Long updateLetterDetail(BaseOfficialLetterDetailSaveReqVO createReqVO);

    Long submitOfficialLetter(BaseOfficialLetterSubmitReqVO submitReqVO);

    void updateOfficialDetail(BaseOfficialLetterDetailsSaveReqVO updateReqVO);

    Long createBaseOfficialRecord(BaseOfficialLetterRecordsSaveReqVO createReqVO);
}